package com.baidu.serviceimpl;

import com.baidu.mapper.GoodsWebMapper;
import com.baidu.pojo.CarBean;
import com.baidu.pojo.CustomerBean;
import com.baidu.pojo.GoodsBean;
import com.baidu.pojo.OrderBean;
import com.baidu.service.GoodsWebService;
import com.baidu.utils.EcityMD5Code;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * 创作时间：2019/11/6 10:01
 * 作者：李增强
 */
@Service
public class GoodsWebServiceImpl implements GoodsWebService {

    @Resource
    private GoodsWebMapper goodsWebMapper;
    @Override
    public List<GoodsBean> getGoodsWebList() {
        return goodsWebMapper.getGoodsWebList();
    }

    @Override
    public GoodsBean getGoodsWebByGid(Integer gid) {
        return goodsWebMapper.getGoodsWebByGid(gid);
    }

    @Override
    public CustomerBean getWebLogin(String cname, String pwd) {
        CustomerBean rcb = goodsWebMapper.getWebLogin(cname);
        if(rcb!=null){
            EcityMD5Code md = new EcityMD5Code();
            String npwd = md.getMD5ofStr(rcb.getCname() + pwd);
            if(rcb.getPwd().equals(npwd)){
                return rcb;
            }
        }

        return null;
    }

    @Override
    public void saveCarInfo(List<CarBean> clist) {
        /**
         * 要for循环添加数据
         * 要是这个用户原来的数据库中有选择好的相同商品，
         */
        for (CarBean cb : clist) {
            /**
             * 业务，用户给某个商品，选择了一次之后，有数量，第二次再次选择，会把第一次的数量覆盖掉，不是修改（新增）
             * （京东就是这么做的）
             */
            goodsWebMapper.deleteCarInfo(cb.getCid(),cb.getGid());
            goodsWebMapper.saveCarInfo(cb);



        }
    }

    @Override
    public List<GoodsBean> getCarListById(Integer id) {
        List<CarBean> clist = goodsWebMapper.getCarListById(id);
        List<GoodsBean> list = new ArrayList<>();
        for (CarBean cb : clist) {
            GoodsBean gb = goodsWebMapper.getGoodsWebByGid(cb.getGid());
            gb.setCount(cb.getCount());
            list.add(gb);
        }
        return list;
    }

    public void saveGoodsToCar(CarBean car) {
        goodsWebMapper.deleteCarInfo(car.getCid(),car.getGid());
        goodsWebMapper.saveCarInfo(car);
    }

    @Override
    public void updateGoodsCount(Integer id, Integer gid, Integer count) {
        goodsWebMapper.updateGoodsCount(id,gid,count);
    }

    @Override
    public void saveGoodsOrder(Integer id, Integer[] gids) {
        if(gids!=null&&gids.length>=1){
            /**
             * 只要选择的商品不为空，先生成订单编号
             * 1、生成订单编号，保存订单的时候，就需要总价，总价需要计算
             *  页面过来只有商品编号，需要去查询数量和单价（多个商品对应一个订单）
             *
             *  保存订单详情、一个商品对应一条信息
             *  需要把购物车中已经下单的删掉（购物车一条一个信息）
             */
            String oid=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+UUID.randomUUID().toString().replace("-", "").substring(0, 6);

            Double toprice=0.0;
            for (Integer gid : gids) {
                /**
                 * 查询数量和单价（计算总价，数量需要保存在订单详情表中）
                 * 单价需要去商品表查询
                 * 数量需要去购物车查询
                 */
                GoodsBean gb = goodsWebMapper.getGoodsWebByGid(gid);
                CarBean car = goodsWebMapper.getCarInfo(id,gid);
                toprice+=gb.getGprice()*car.getCount();
                /**
                 * 添加订单详情，删除购物车
                 */
                goodsWebMapper.saveOrderInfo(oid,gid,car.getCount());
                goodsWebMapper.deleteCarInfo(id, gid);
            }
            goodsWebMapper.saveGoodsOrder(oid,id,0,toprice,new Date());
        }
    }

    @Override
    public List<OrderBean> getOrderListByCid(Integer cid) {
        return goodsWebMapper.getOrderListByCid(cid);
    }
}
